package com.warm.spring.ioc.condition;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * @Description 条件化 bean
 * @Author iyb-liangchuang
 * @Date 2021/5/13 9:33
 */
public class SaberCondition implements Condition {

    /**
     *  ConditionContext:
     *    getRegistry(): 返回 BeanDefinitionRegistry 检查 bean 定义
     *    getBeanFactory(): 返回 ConfigurableListableBeanFactory 检查 bean 是否存在, 探查 bean 的属性
     *    getEnvironment(): 返回 Environment 检查环境变量是否存在以及值
     *    getResourceLoader(): 返回 ResourceLoader 所加载资源
     *    getClassLoader(): 返回 ClassLoader 加载并检查类是否存在
     *
     *  AnnotatedTypeMetadata:
     *    isAnnotated(): 检查 @Bean 注解的方法上还有什么其他注解
     */

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        System.out.println("Condition match......");
        System.out.println(env.containsProperty("server"));
        return true;
    }
}
